#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>

using namespace std;
const int N=4e4+10;
int pos[N],ans[N];
int a[N],cnt[N],ccnt[N];
int n,m;

struct node
{
    int l,r,k,id;
}q[N];

bool cmp(node x,node y)
{
    if(pos[x.l]==pos[y.l]) return x.r<y.r;
    return pos[x.l]<pos[y.l];
}

void add(int x)
{
    ccnt[cnt[a[x]]]--;
    cnt[a[x]]++;
    ccnt[cnt[a[x]]]++;
}

void sub(int x)
{
    ccnt[cnt[a[x]]]--;
    cnt[a[x]]--;
    ccnt[cnt[a[x]]]++;
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    
    for(int i=0;i<m;i++)
    {
        cin>>q[i].l>>q[i].r>>q[i].k;
        q[i].id=i;
    }
    
    int siz=sqrt(n);
    for(int i=1;i<=n;i++)
    {
        pos[i]=i/siz;
    }
    
    sort(q,q+m,cmp);
    int l=1,r=0;
    
    for(int i=0;i<m;i++)
    {
        while(l>q[i].l) add(--l);
        while(r<q[i].r) add(++r);
        while(l<q[i].l) sub(l++);
        while(r>q[i].r) sub(r--);
        ans[q[i].id]=ccnt[q[i].k];
    }
    
    for(int i=0;i<m;i++)
    {
        cout<<ans[i]<<endl;
    }
    
    return 0;
}
